// 创建实例时配置默认值
const instance = axios.create({
    baseURL: '/api',
    timeout: 15000,
    headers: {
        'Content-Type': 'application/json;charset=utf-8'
    }
});

// 添加请求拦截器
instance.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    const token = localStorage.getItem('token');
    if (token) {
        config.headers['Authorization'] = `Bearer ${token}`;
    }
    if (config.method === 'get') {
        config.params = { ...config.params, _t: Date.now() };
    }
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
instance.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    const jsonData = response.data;
    if (jsonData) {
        const code = jsonData.code;
        if (code === 0) {
            return response.jsonData;
        }
        //layer.msg(jsonData.errorMessage, { icon: 2 }, function () { });
    }
    // return response;
    return Promise.reject(new Error(jsonData.errorMessage || jsonData.error || '请求失败'));
}, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    if (error.response.stats === 401) {
        window.location.href = '/login';
    }
    const jsonData = error.response?.data;
    if (jsonData) {
        const status = jsonData.status;
        if (status === 401) {
            window.location.href = '/login';
        }
        //layer.msg(jsonData.errorMessage, { icon: 2 }, function () { });
    }
    // return Promise.reject(error);
    return Promise.reject(new Error(jsonData.errorMessage || jsonData.error || '请求失败'));
});
// https://www.axios-http.cn/docs/instance
/**
 * 封装HTTP请求方法
 */
const http = {
    /**
     * GET请求
     * @param {string} url 请求URL
     * @param {object} params 请求参数
     * @param {object} config 请求配置
     * @returns {Promise}
     */
    get(url, params = {}, config = {}) {
        return instance.get(url, { params, ...config });
    },

    /**
     * POST请求
     * @param {string} url 请求URL
     * @param {object} params 请求参数
     * @param {object} data 请求数据
     * @param {object} config 请求配置
     * @returns {Promise}
     */
    post(url, params = {}, data = {}, config = {}) {
        return instance.post(url, data, { params, ...config });
    },

    /**
     * PUT请求
     * @param {string} url 请求URL
     * @param {object} params 请求参数
     * @param {object} data 请求数据
     * @param {object} config 请求配置
     * @returns {Promise}
     */
    put(url, params = {}, data = {}, config = {}) {
        return instance.put(url, data, { params, ...config });
    },

    /**
     * PATCH请求
     * @param {string} url 请求URL
     * @param {object} params 请求参数
     * @param {object} data 请求数据
     * @param {object} config 请求配置
     * @returns {Promise}
     */
    patch(url, params = {}, data = {}, config = {}) {
        return instance.patch(url, data, { params, ...config });
    },

    /**
     * DELETE请求
     * @param {string} url 请求URL
     * @param {object} params 请求参数
     * @param {object} config 请求配置
     * @returns {Promise}
     */
    delete(url, params = {}, config = {}) {
        return instance.delete(url, data, { params, ...config });
    },

    /**
     * 上传文件
     * @param {string} url 请求URL
     * @param {FormData} formData 表单数据
     * @param {object} config 请求配置
     * @returns {Promise}
     */
    upload(url, formData, config = {}) {
        return instance.post(url, formData, {
            headers: { 'Content-Type': 'multipart/form-data' },
            ...config
        });
    }
};
